[アップデート] AWS AppConfig にアカウント共通で設定可能な削除保護機能が追加されました

[アップデート] AWS AppConfig にアカウント共通で設定可能な削除保護機能が追加されました

Clock Icon2024.09.02

いわさです。

AWS AppConfig を使うとアプリケーション動作を設定するための構成情報やフィーチャーフラグを動的に環境別に配信し、新しい機能を安全にユーザーへリリースしたりロールバックさせたり、あるいは一部のプレミアム機能を特定ユーザへのみ提供するなど様々な使い方が出来ます。
ただし、通常アプリケーションと紐づいている設定値であるため、使用中の AppConfig のリソースを削除してしまうとシステム障害を招く危険性もあります。

これまで誤削除を防止する機能がなかったのですが、先日のアップデートで AppConfig でもついに削除防止機能がリリースされました。

https://aws.amazon.com/about-aws/whats-new/2024/08/aws-appconfig-deletion-protection-additional-guardrails/

これは!!と思って使ってみたのですが、従来のよくある削除保護と仕様が違っていたり、あるいは私が確認した際には東京リージョンでうまく動作しなかったりと、色々試した様子を紹介したいと思います。

東京リージョンで動作するはずだが...

アップデートアナウンスを見る限りだと一部の特殊リージョンを除く AppConfig 対応全リージョンでこの機能が使えるようです。
東京リージョンでも使えるはずなのですが、私が試した際にはうまく動作しませんでした。どうして...

% aws appconfig get-account-settings

An error occurred (UnknownOperationException) when calling the GetAccountSettings operation: 

そこで、本記事ではバージニア北部リージョン(US-EAST-1)で検証を行いました。
バージニア北部以外でもいくつかの US リージョンでは API が実行出来ることを確認しており対応状況がよくわかっていないのですが、数日後にまた東京リージョンで試してみます。

バージニア北部やオハイオで実行すると次のような結果が得られます。

% aws appconfig get-account-settings --region us-east-1
{
    "DeletionProtection": {
        "Enabled": false,
        "ProtectionPeriodInMinutes": 15
    }
}

今回の削除保護機能はリソース個別で保護指定するものではなく、アカウント一括で削除保護機能として有効化するものです。
今回のアップデートで上記の GetAccountSettings API などが追加されていまして、アカウント設定として削除保護設定を確認することが出来ます。
ちなみにこの設定はリージョンごととなっています。

有効化してみる

割愛していましたが、AWS CLI を最新バージョンに更新しておきます。

% aws --version
aws-cli/2.17.41 Python/3.11.9 Darwin/23.6.0 exe/x86_64

デフォルトでは先ほどのように削除保護機能は無効状態でして、上記設定を UpdateAccountSettings API で更新することで有効にすることが出来ます。
有効化してみましょう。

% aws appconfig update-account-settings --deletion-protection Enabled=true --region us-east-1
{
    "DeletionProtection": {
        "Enabled": true,
        "ProtectionPeriodInMinutes": 15
    }
}

Enabledで削除保護設定が有効かどうかを設定します。
今回省略しましたがProtectionPeriodInMinutesで削除保護する期間を設定することが出来ます。デフォルトは 60 分とドキュメントに記載されているのですが、私が試した時には 15 分でした。

削除保護する期間というのは新しい概念な気がしますね。
AWS AppConfig は GetLatestConfiguration API などで構成値を取得するような使い方になります。そしてアクティブに使用されている構成については削除できなくするという仕組みになっています。

なので、未使用、あるいは最後に使用してから時間が経過している設定については削除することが出来ます。
ProtectionPeriodInMinutesの最小値は 15 分で、最大値は 1440 分(24 時間)です。

削除保護されるか試してみる

削除保護機能の有効化までは出来たので実際に削除出来なくなるか試してみましょう。
アプリケーション + プロファイル + 環境のセットを用意し、環境へのデプロイまで済ませておきます。

2FFB5E16-D04F-498D-837E-D0E73FFEDB27.png

AWS AppConfig は AppConfig API がコントロールプレーン的な API で、AppConfigData API がデータプレーン的な API になってます。
ということで AppConfigData API を使ってアクセスしてみましょう。次の公式ドキュメントの手順を参考にしています。

https://docs.aws.amazon.com/cli/latest/reference/appconfigdata/

% aws appconfigdata get-latest-configuration --region us-east-1 --configuration-token $(aws appconfigdata start-configuration-session --application-identifier hoge0830app2 --environment-identifier hoge0830env2 --configuration-profile-identifier hoge0830flag2 --region us-east-1 --query InitialConfigurationToken) outfile.txt
{
    "NextPollConfigurationToken": "AYADeAD6jg3+7/QUq1hX+WhGmTcAXwABABVhd3MtY3J5cHRvLXB1YmxpYy1rZXkAREF3SGxXbHRZOG1GTzQ3SzJFdmhEMitOb21COEpsRksyS0ZKdzZMMmdqMzQ4K25LdjdzRHI2TUJIaGlXNk9WSFNSQT09AAEAB2F3cy1rbXMAS2Fybjphd3M6a21zOnVzLWVhc3QtMTo0NjA2NzgyNDcwMDI6a2V5LzRhOTNiN2Y4LWQzOWYtNDUyNi1hMWNhLWM5ZDRkMGNiMWE5ZgC4AQIBAHgwfOFLqccSJubOFH6i25Qi3wkYdpGQVXbhvQvkDgeieAGKt/vBjeuI0yTfFvVgzKSYAAAAfjB8BgkqhkiG9w0BBwagbzBtAgEAMGgGCSqGSIb3DQEHATAeBglghkgBZQMEAS4wEQQMXhIB9lC2lIT2sOORAgEQgDuEU07y/V/1r9lINONEJM6eh49GXLBr+j6CJPluARCAoMKDJ5RTRF3O91PNiu9Yb91wahWzpkLnyQEtpwIAAAAADAAAEAAAAAAAAAAAAAAAAAAbthHMqiq2u0dyevAVRVq9/////wAAAAEAAAAAAAAAAAAAAAEAAAEZx1HUQMd5fC6YDf7mFYYWJDdio0UKt2JA8rsT0tupVCDQWAYlPzW9JduI5IB+q4YXTRgQRpksaiLRK74n1zzvUckCWbq0Kz1QKY/VB/FU4skoASXi1wAnPzCUwFZZyusu6ibNAeehYcx0FrjAZn6xbOpa50In0H0yP+zU69XX8ONc379tVHVjsMOAVC34PYCK4847C4fjPJi5H1N+nrVE0SAyTj1DXFNzApcKkw2Pqmn9lpBqAmVzdfWO4FymruD83CDw+S/1xLG/+xkGFbjFlw7Wb/r3xoaGyDIcQZ6rIUPYE+Q3GfWsARVWi3IZGPmSi4IjLKM7wAYvNgrbJM2cXo2eqUBmzDpYo9pT0cq7GDn6LEcp3h5X9dq/C1Bu2uLTFC6ElaskI09JAGcwZQIxAIiPKNOc19AHx+FPUxnN7kPe9+qbvatXLHuuurjv98CJI8aWErR5JTmjWT0lvrtI+AIwdLwrgSUsr8gu9fUvKCS1xIdSettLm9j6dTGVn9K7AcVhBzVU7BAg9Imj5mUry6mg",
    "NextPollIntervalInSeconds": "60",
    "ContentType": "application/json"
}
% cat outfile.txt
{"aaa":{"enabled":true}}

良いですね。取得出来ました。
ではまずは環境の削除から行ってみましょう。

EA0A3E63-4307-48E2-AF53-F963CD7B5259.png

あれ!削除出来てしまった...

過去 1 時間に作成されたリソースはスキップされる

よく公式ドキュメントを読んでみると注意事項が記載されていまして、短期間のリソースを作成するテストやデモへの影響を防ぐために過去 1 時間以内に作成されたリソースについては削除保護をスキップするという仕様になっています。
なるほど。これは...むしろ良いですね。

https://docs.aws.amazon.com/appconfig/latest/userguide/deletion-protection.html

1 時間経過したリソースは削除保護された

1 時間経過後にもう一度削除操作を行ってみました。

416C3EEC-246B-49E9-ACEA-32D825166B2B.png

今度は先程と異なり、環境の削除時に確認メッセージが表示されるようになりました。おぉ。

CCE09E33-948F-4273-8D6C-E84733C5B5D9.png

「削除保護をオーバーライドして削除」を選択すると削除することが出来ました。

6E6FE606-870C-4538-817D-E9D3D03BB954.png

ちなみに直近の使用履歴が無い、使ってないものは確認が入らずそのまま削除されました。
ですので、このリソース削除保護の確認メッセージが表示されるということは直近の使用されている構成値や環境と考えて良さそうです。

F2AC76CE-5CD8-4F42-B45C-7EA0C919BED1.png

AWS CLI の削除保護の場合でも同様でした。

% aws appconfig delete-environment --application-id 1jik1qt --environment-id czrlt4e --region us-east-1

An error occurred (BadRequestException) when calling the DeleteEnvironment operation: Environment hoge0830env is actively being used in your Application and cannot be deleted. Please see https://docs.aws.amazon.com/appconfig/latest/userguide/deletion-protection.html for more details.

AWS CLI だとdeletion-protection-checkオプションでBYPASSを指定することで「削除保護をオーバーライドして削除」を選択した時と同じ動作になります。

なお、上記確認メッセージには「リソースタイプ」の表記があります。
先ほどは環境に関する確認メッセージでしたが、設定プロファイルや機能フラグでも同様にメッセージが表示されました。

7CB1ABD1-DFED-4D21-9D94-3E9BA7D89D32.png

DE654F5A-D003-447D-88D5-8ACEBBAC3A53.png

それぞれの使用状況が追跡されているようで、アクティブなプロファイルでも使われていない環境については削除することが出来るような仕組みになっています。

さいごに

本日は AWS AppConfig にアカウント共通で設定可能な削除保護機能が追加されたので使ってみました。

従来の削除保護だとリソース作成後に削除保護を有効化してずっと保護されるみたいな形でしたが、アカウント共通で有効化設定しておき使用状況に応じた保護がされるというのは新しいですね。

このアクティブなもののみ削除保護出来るという点や、あるいは作成後 1 時間のリソースはスキップされたりするので、デフォルトは無効化されていますがこの設定は全アカウント有効化して良いんじゃないかなと思いました。

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.